package com.xbongbong.paas.enums;

import com.xbongbong.saas.enums.XbbRefTypeEnum;
import lombok.Getter;

import java.util.Objects;

/**
 * saas es的字段数量枚举类
 * @author 吴峰
 * @date 2020/09/25 10:53
 */
@Getter
public enum ProEsAliasEnum {


    /**
     * saas的公共的各个字段es数量，如果各个业务开始增加自己的数量，请单独放开，否则会按照公共数量限制
     * 例如：CUSTOMER_MANAGEMENT(XbbRefTypeEnum.CUSTOMER_MANAGEMENT.getCode(), EsAliasEnum.TEXT.getSaasMax(), EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(), EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(), EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(), EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
     *
     */
    // 公共部分 (不要动，要动找卡特或吴峰)
    SAAS_COMMON("404", EsAliasEnum.TEXT.getSaasMax(), EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    SAAS_CUSTOMER(String.valueOf(XbbRefTypeEnum.CUSTOMER_MANAGEMENT.getCode()), 85, 62, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            31, EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    SAAS_CLUE(String.valueOf(XbbRefTypeEnum.CLUE.getCode()), 81, 61, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    // 产品新增数字字段 61、62
    SAAS_PRODUCT(String.valueOf(XbbRefTypeEnum.PRODUCT.getCode()), EsAliasEnum.TEXT.getSaasMax(), 62, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            31, EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 应收款新增text，num类型字段（date类型不能扩展）
    PAYMENT(String.valueOf(XbbRefTypeEnum.PAYMENT.getCode()), 85, 64, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            31, EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 回款单新增text类型字段
    PAYMENT_SHEET(String.valueOf(XbbRefTypeEnum.PAYMENT_SHEET.getCode()), 85, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 销项发票新增text类型字段
    INVOICE(String.valueOf(XbbRefTypeEnum.INVOICE.getCode()), 81, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 客户新增text
    CUSTOMER_MANAGEMENT(String.valueOf(XbbRefTypeEnum.CUSTOMER_MANAGEMENT.getCode()), 81, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 合同新增text
    CONTRACT(String.valueOf(XbbRefTypeEnum.CONTRACT.getCode()), 86, 62, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), 16, EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    // 退货退款新增text字段
    REFUND(String.valueOf(XbbRefTypeEnum.REFUND.getCode()), 83, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    // 销售出库单新增text字段
    OUT_STOCK(String.valueOf(XbbRefTypeEnum.CONTRACT_OUTSTOCK.getCode()), 88, 62, EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    // paas
    PAAS(String.valueOf(XbbRefTypeEnum.PAAS.getCode()), EsAliasEnum.TEXT.getMax(), EsAliasEnum.NUM.getMax(), EsAliasEnum.LONG.getMax(), EsAliasEnum.ADDRESS.getMax(),
            EsAliasEnum.GEO.getMax(), EsAliasEnum.DATE.getMax(), EsAliasEnum.SUB_FORM.getMax(), EsAliasEnum.FILE.getMax(),
            EsAliasEnum.ARRAY.getMax(), EsAliasEnum.OTHER.getMax(), EsAliasEnum.OPTION.getMax(), EsAliasEnum.LOCATION.getMax(),
            EsAliasEnum.MY_TEAM.getMax(), EsAliasEnum.PHONE_TEXT.getMax()),

    // 子表单
    SUB_FORM(String.valueOf(FieldTypeEnum.SUB_FORM.getType()), SubEsAliasEnum.TEXT.getMax(), SubEsAliasEnum.NUM.getMax(), SubEsAliasEnum.LONG.getMax(), SubEsAliasEnum.ADDRESS.getMax(),
            SubEsAliasEnum.GEO.getMax(), SubEsAliasEnum.DATE.getMax(), 0, SubEsAliasEnum.FILE.getMax(),
            SubEsAliasEnum.ARRAY.getMax(), 0, 0, SubEsAliasEnum.LOCATION.getMax(),
            0, 0),

    // 选择产品
    SELECT_PRODUCT(String.valueOf(FieldTypeEnum.SELECT_PRODUCT.getType()), SubEsAliasEnum.TEXT.getSelectProductNum(), SubEsAliasEnum.NUM.getSelectProductNum(), SubEsAliasEnum.LONG.getSelectProductNum(), SubEsAliasEnum.ADDRESS.getSelectProductNum(),
            SubEsAliasEnum.GEO.getSelectProductNum(), SubEsAliasEnum.DATE.getSelectProductNum(), 0, SubEsAliasEnum.FILE.getSelectProductNum(),
            SubEsAliasEnum.ARRAY.getSelectProductNum(), 0, 0, SubEsAliasEnum.LOCATION.getSelectProductNum(),
            0, 0),

    // 采购合同产品
    PURCHASE_SELECT_PRODUCT(String.valueOf(XbbRefTypeEnum.PURCHASE.getCode()) + "_" + FieldTypeEnum.SELECT_PRODUCT.getType(), 22, SubEsAliasEnum.NUM.getSelectProductNum(), SubEsAliasEnum.LONG.getSelectProductNum(), SubEsAliasEnum.ADDRESS.getSelectProductNum(),
            SubEsAliasEnum.GEO.getSelectProductNum(), SubEsAliasEnum.DATE.getSelectProductNum(), 0, SubEsAliasEnum.FILE.getSelectProductNum(),
            SubEsAliasEnum.ARRAY.getSelectProductNum(), 0, 0, SubEsAliasEnum.LOCATION.getSelectProductNum(),
            0, 0),
    // 合同产品
    CONTRACT_PRODUCT(String.valueOf(XbbRefTypeEnum.CONTRACT.getCode()) + "_" + FieldTypeEnum.SELECT_PRODUCT.getType(), SubEsAliasEnum.TEXT.getSelectProductNum(), SubEsAliasEnum.NUM.getSelectProductNum(), SubEsAliasEnum.LONG.getSelectProductNum(), SubEsAliasEnum.ADDRESS.getSelectProductNum(),
            SubEsAliasEnum.GEO.getSelectProductNum(), SubEsAliasEnum.DATE.getSelectProductNum(), 0, SubEsAliasEnum.FILE.getSelectProductNum(),
            SubEsAliasEnum.ARRAY.getSelectProductNum(), 0, 0, SubEsAliasEnum.LOCATION.getSelectProductNum(),
            0, 0),
    // 联系电话
    CONTACT_NUMBER(String.valueOf(FieldTypeEnum.CONTACT_NUMBER.getType()), SubEsAliasEnum.TEXT.getContactPhoneNum(), SubEsAliasEnum.NUM.getContactPhoneNum(), SubEsAliasEnum.LONG.getContactPhoneNum(), SubEsAliasEnum.ADDRESS.getContactPhoneNum(),
            SubEsAliasEnum.GEO.getContactPhoneNum(), SubEsAliasEnum.DATE.getContactPhoneNum(), 0, SubEsAliasEnum.FILE.getContactPhoneNum(),
            SubEsAliasEnum.ARRAY.getContactPhoneNum(), 0, 0, SubEsAliasEnum.LOCATION.getContactPhoneNum(),
            0, 0),
    // 孤独子表单
    SINGLE_SUB_FORM(String.valueOf(FieldTypeEnum.SINGLE_SUB_FORM.getType()), SubEsAliasEnum.TEXT.getSingleSubFormNum(), SubEsAliasEnum.NUM.getSingleSubFormNum(), SubEsAliasEnum.LONG.getSingleSubFormNum(), SubEsAliasEnum.ADDRESS.getSingleSubFormNum(),
            SubEsAliasEnum.GEO.getSingleSubFormNum(), SubEsAliasEnum.DATE.getSingleSubFormNum(), 0, SubEsAliasEnum.FILE.getSingleSubFormNum(),
            SubEsAliasEnum.ARRAY.getSingleSubFormNum(), 0, 0, SubEsAliasEnum.LOCATION.getSingleSubFormNum(),
            0, 0),
    // 开关+文本
    SWITCH_TEXT(String.valueOf(FieldTypeEnum.SWITCH_TEXT.getType()), SubEsAliasEnum.TEXT.getSwitchTextNum(), SubEsAliasEnum.NUM.getSwitchTextNum(), SubEsAliasEnum.LONG.getSwitchTextNum(), SubEsAliasEnum.ADDRESS.getSwitchTextNum(),
            SubEsAliasEnum.GEO.getSwitchTextNum(), SubEsAliasEnum.DATE.getSwitchTextNum(), 0, SubEsAliasEnum.FILE.getSwitchTextNum(),
            SubEsAliasEnum.ARRAY.getSwitchTextNum(), 0, 0, SubEsAliasEnum.LOCATION.getSwitchTextNum(),
            0, 0),
    // 联系人新增头像　file_11
    SAAS_CONTACT(String.valueOf(XbbRefTypeEnum.CONTACT.getCode()), EsAliasEnum.TEXT.getSaasMax(), EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), 11,
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    // 产品调整单
    COST_ADJUST(String.valueOf(XbbRefTypeEnum.COST_ADJUST.getCode()), 82, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    SALES_OPPORTUNITY(String.valueOf(XbbRefTypeEnum.SALES_OPPORTUNITY.getCode()), 84, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),

    WORK_ORDER_V2(String.valueOf(XbbRefTypeEnum.WORK_ORDER_V2.getCode()), 82, EsAliasEnum.NUM.getSaasMax(), EsAliasEnum.LONG.getSaasMax(), EsAliasEnum.ADDRESS.getSaasMax(),
            EsAliasEnum.GEO.getSaasMax(), EsAliasEnum.DATE.getSaasMax(), EsAliasEnum.SUB_FORM.getSaasMax(), EsAliasEnum.FILE.getSaasMax(),
            EsAliasEnum.ARRAY.getSaasMax(), EsAliasEnum.OTHER.getSaasMax(), EsAliasEnum.OPTION.getSaasMax(), EsAliasEnum.LOCATION.getSaasMax(),
            EsAliasEnum.MY_TEAM.getSaasMax(), EsAliasEnum.PHONE_TEXT.getSaasMax()),
    ;

    /**
     * 业务类型
     */
    private String code;

    private Integer textMax;

    private Integer numMax;

    private Integer longMax;

    private Integer addressMax;

    private Integer geoMax;

    private Integer dateMax;

    private Integer subFormMax;

    private Integer fileMax;

    private Integer arrayMax;

    private Integer otherMax;

    private Integer optionMax;

    private Integer locationMax;

    private Integer myTeamMax;

    private Integer phoneTextMax;

    ProEsAliasEnum(String code, Integer textMax, Integer numMax, Integer longMax, Integer addressMax, Integer geoMax, Integer dateMax, Integer subFormMax, Integer fileMax, Integer arrayMax, Integer otherMax, Integer optionMax, Integer locationMax, Integer myTeamMax, Integer phoneTextMax) {
        this.code = code;
        this.textMax = textMax;
        this.numMax = numMax;
        this.longMax = longMax;
        this.addressMax = addressMax;
        this.geoMax = geoMax;
        this.dateMax = dateMax;
        this.subFormMax = subFormMax;
        this.fileMax = fileMax;
        this.arrayMax = arrayMax;
        this.otherMax = otherMax;
        this.optionMax = optionMax;
        this.locationMax = locationMax;
        this.myTeamMax = myTeamMax;
        this.phoneTextMax = phoneTextMax;
    }

    /**
     * 根据code获取对应业务的字段类型对应的es数量
     * @param code
     * @return
     */
    public static ProEsAliasEnum getByCode(String code) {
        for (ProEsAliasEnum proEsAliasEnum : values()) {
            if (Objects.equals(proEsAliasEnum.getCode(), code)) {
                return proEsAliasEnum;
            }
        }
        return SAAS_COMMON;
    }

    /**
     * 根据code获取对应业务的字段类型对应的es数量
     * @param code
     * @return
     */
    public static ProEsAliasEnum getSelectProductByCode(String code) {
        for (ProEsAliasEnum proEsAliasEnum : values()) {
            if (Objects.equals(proEsAliasEnum.getCode(), code)) {
                return proEsAliasEnum;
            }
        }
        return SELECT_PRODUCT;
    }
}
